"""
饮食摄入记录表
"""
from datetime import date, datetime, timedelta
from app.db import db


class FoodRecord(db.Model):
    # 定义表名
    __tablename__ = 'food_record'
    # 主键
    id = db.Column(db.Integer, primary_key=True)
    # 食物类型
    food_cate_id = db.Column(db.Integer, db.ForeignKey('food_cate.id'))
    # 用户id
    user_id = db.Column(db.Integer, db.ForeignKey('user_info.id'))
    # 食物名称id
    food_id = db.Column(db.Integer, db.ForeignKey('food_cal.id'))
    # 实际克重
    act_intake_gram = db.Column(db.Float)
    # 实际摄入热量
    act_intake_kcal = db.Column(db.Float)
    # 摄入日期（Date类型：仅日期）
    intake_date = db.Column(db.Date)
    # 提交时间（DateTime类型：日期+时间）
    submit_time = db.Column(db.DateTime)
    # 备注
    note = db.Column(db.Text)

    def to_dict(self):
        """将模型实例转换为字典，统一格式化日期时间字段"""
        # 基础字段转换（包含所有列）
        base_dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns}

        # 定义日期时间格式化规则：字段名 -> (目标格式, 支持的类型)
        date_format_rules = {
            'intake_date': ('%Y-%m-%d', (date, datetime)),  # Date/DateTime 均转为 年月日
            'submit_time': ('%Y-%m-%d %H:%M:%S', (datetime,))  # 仅DateTime 转为 年月日 时分秒
        }

        for field, (fmt, valid_types) in date_format_rules.items():
            value = base_dict.get(field)
            if value is None:
                continue  # 字段为None，跳过格式化

            # 容错处理：仅对有效类型格式化，避免异常（如误存timedelta）
            if isinstance(value, valid_types):
                base_dict[field] = value.strftime(fmt)
            elif isinstance(value, timedelta):
                # 兼容之前的timedelta问题：转为当前时间+时间差的格式（可根据业务调整）
                base_dict[field] = (datetime.now() + value).strftime(fmt)
            else:
                # 其他无效类型：保留原始值（或设为None），打印警告
                print(f"⚠️  字段 {field} 类型无效（{type(value).__name__}），跳过格式化")

        return base_dict
